package cn.hughie.type;

import java.util.Arrays;

/**
 * @Author yuh
 * @Date Created in 下午10:18 2018/5/18
 * @Description
 */
public class TypeSpecifier {

    /**
     * 分类
     *
     * @param arr
     * @param <T>
     */
    public static <T extends SthWithKey> void specify(T[] arr, int n) {
        T[] aux = (T[]) new SthWithKey[arr.length];
        int[] count = new int[n + 2];
        //统计数量 后一组保存前一组的数量
        for (int i = 0; i < arr.length; i++) {
            count[arr[i].key() + 1]++;
        }
        //计算 后一组保存前所有组的数量 这一步已经确定了 第几组该放在哪里
        for (int i = 0; i < n; i++) {
            count[i + 1] += count[i];
        }
        //分类
        for (T t : arr) {
            aux[count[t.key()]++] = t;
        }
        //赋给原数组
        System.arraycopy(aux, 0, arr, 0, arr.length);
    }

    public static void main(String[] args) {
        Student[] students = new Student[10];
        for (int i = 0; i < 10; i++) {
            students[i] = new Student(6-((i + 2) / 2), "name" + i);
        }
        System.out.println(Arrays.toString(students));
        specify(students, 5);
        System.out.println(Arrays.toString(students));

    }
}
